【SpringBoot】POSTリクエストをマッピングする@PostMappingアノテーションを解説します 您所在的位置:网站首页 postman springboot 【SpringBoot】POSTリクエストをマッピングする@PostMappingアノテーションを解説します

【SpringBoot】POSTリクエストをマッピングする@PostMappingアノテーションを解説します

2024-07-16 17:43| 来源: 网络整理| 查看: 265

こんにちは。たいら(@tairaengineer2)です。 転職を繰り返し現在4社経験している、10年目エンジニアです。

この記事では、 SpringBootでPOSTリクエストをマッピングできる@PostMappingアノテーションについて

@PostMappingアノテーションとは @PostMappingアノテーションを使ったサンプルプログラム

と、丁寧に解説していきます。

前提:実施している環境@PostMappingアノテーションとは@PostMappingアノテーションを解説するプログラムの概要Javaサンプルプログラム実行結果まとめ:@PostMappingアノテーションを使ってみよう! 前提:実施している環境

この記事では、以下の環境で行っています。

OS Windows10 IntelliJ IDEAのエディション Community(無料版) IntelliJ IDEAのバージョン 2021.3.2 プロジェクト Gradle Project 言語 Java バージョン11 フレームワーク Spring Boot バージョン2.6.3

Spring Bootを動かすためにIntelliJ IDEAを使っています。 IntelliJ IDEAのインストールとSpring Bootプロジェクトを新規作成するやり方はこちらの記事をご参考ください。

IntelliJ IDEAのインストール 【IntelliJ IDEA】インストールするやり方を解説します(Windows向け)

Spring Bootプロジェクトを新規作成するやり方 【IntelliJ IDEA】Spring Initializrを使ってSpring Bootプロジェクトを新規作成するやり方を解説します

この記事では

C:\SpringBootSample

配下に「SpringSample」という名前のプロジェクトを作っています。 SpringBootの@PostMappingアノテーションを解説

@PostMappingアノテーションとは

@PostMappingアノテーションとは、POSTリクエストのみをURLとコントローラーのクラスまたはメソッドを紐づけることができるアノテーションです。 要は@PostMappingアノテーションは、@RequestMappingアノテーションのPOSTリクエスト用のアノテーションです。 @RequestMappingアノテーションについては、こちらの記事をご参考ください。

【SpringBoot】URLとクラスやメソッドをマッピングする@RequestMappingアノテーションを解説します

@PostMappingアノテーションを使うためには

Java 1 import org.springframework.web.bind.annotation.PostMapping;

をインポートする必要があります。

@PostMappingアノテーションの使い方サンプルは以下になります。

1234 @PostMapping(value = "/sample")String sample(){ // 処理}

value属性は、メソッドやクラスに紐づけるURLのパスを指定する属性です。

1234 @PostMapping(value = "/sample")String sample(){ // 処理}

だとPOSTリクエストの【http://localhost:8080/sample】というURLとsampleメソッドを紐づける、という意味です。 最初の「/」は省略してもOKです。

属性名の「value」は

Java 1234 @PostMapping("/sample")String sample(){ // 処理}

と、省略してもOKです。

また、value属性には複数のURLのパスを指定することもできます。 書き方は

Java 1234 @PostMapping({"/test", "/sample"})String sample(){ // 処理}

です。 この場合POSTリクエストの

http://localhost:8080/sample http://localhost:8080/test

のURLのパスとsampleメソッドを紐づけています。

@RequestMappingアノテーションだとあったmethod属性は、@PostMappingアノテーションにはありません。

では、次の章で実際に使ってみます。

@PostMappingアノテーションを解説するプログラムの概要

@PostMappingアノテーションを解説するプログラムでは、 value属性にURLのパスを2つ指定したメソッドを1つ作成します。

value属性に指定したURLのパス2つともでアクセスできること GETでアクセスできないこと

を確認します。

解説で使うJavaプログラムは、

SpringSample\src\main\java\com\example\SpringSample

配下にある【SpringSampleApplication.java】を使います。 SpringBootの@PostMappingアノテーションを解説

Javaサンプルプログラム

Java 1234567891011121314151617181920 package com.example.SpringSample; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController; @SpringBootApplication@RestControllerpublic class SpringSampleApplication {  public static void main(String[] args) { SpringApplication.run(SpringSampleApplication.class, args); }  @PostMapping(value = {"/hello", "/world"}) String index(){ return "Hello World!"; }}

実行結果

プロジェクトを実行するやり方は

プログラムを右クリックして実行 実行タブから実行 ガターから実行

の3種類あるので、いずれかで実行します。 詳しい解説は以下の記事をご参考ください。

【IntelliJ IDEA】SpringBootプロジェクトを実行するやり方を解説します

今回、確認するにあたりPostmanというツールを使います。 Postmanの基本的な使い方については、こちらの記事をご参考ください。

【Postman】基本的な使い方を解説します

まず、「value属性に指定したURLのパス2つともでアクセスできること」を確認します。 【http://localhost:8080/hello】のURL、かつPOSTでリクエストを投げると、HTTPステータスが正常の200、

Hello World!

が返されているので、アクセスできていることが確認できました。 SpringBootの@PostMappingアノテーションを解説

【http://localhost:8080/world】のURL、かつPOSTでリクエストを投げると、こちらもHTTPステータスが200で

Hello World!

と同じレスポンスが返ってきているので、アクセスできていることが確認できました。 SpringBootの@PostMappingアノテーションを解説

指定したものとは異なる【http://localhost:8080/aaa】のURL、かつPOSTでリクエストを投げると、HTTPステータスが404で

1234567 {    "timestamp": "2022-03-15T08:46:47.329+00:00",    "status": 404,    "error": "Not Found",    "message": "No message available",    "path": "/aaa"}

と、このURLは存在しないとエラーが返ってきているので、アノテーションで指定していないURLにはアクセスできていないことが確認できました。 SpringBootの@PostMappingアノテーションを解説

2つ目の「GETでアクセスできないこと」を確認します。 【http://localhost:8080/hello】のURL、かつGETでリクエストを投げると、HTTPステータスが405で、

12345678 {    "timestamp": "2022-03-15T08:48:46.890+00:00",    "status": 405,    "error": "Method Not Allowed",    "trace": "org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:253)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:442)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:383)\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125)\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498)\r\n\tat org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1261)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1043)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.base/java.lang.Thread.run(Thread.java:833)\r\n",    "message": "Request method 'GET' not supported",    "path": "/hello"}

と、【HttpRequestMethodNotSupportedException】という特定のリクエストメソッドをサポートしていない場合にスローされる例外が返ってきています。 @PostMappingアノテーションだと、GETではアクセスすることができないことが確認できました。 SpringBootの@PostMappingアノテーションを解説

まとめ:@PostMappingアノテーションを使ってみよう!

以上がSpringBootのPOSTリクエストのURLとクラスやメソッドをマッピングする@PostMappingアノテーションについての解説でした!

@PostMappingアノテーションと対をなす、GETリクエストを受け付ける@GetMappingアノテーションというものもあります。 詳しくはこちらの記事をご参考ください。

【SpringBoot】GETリクエストをマッピングする@GetMappingアノテーションを解説します

あなたのご参考になったのなら、とても嬉しいです(*´▽`*) ではでは~(・ω・)ノシ



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有